JavaScript阮一峰教程标准库API一览

您所在的位置:网站首页 阮一峰 web30 JavaScript阮一峰教程标准库API一览

JavaScript阮一峰教程标准库API一览

2023-03-28 11:37| 来源: 网络整理| 查看: 265

实例方法和静态方法最直观的区别

//对象.方法(参数) arr.push() //静态方法(对象) Array.isArray( arr)

记忆那么多的API是有难度的,而且常用的也不多,理解对象本身的特性是最重要的,想一下这个API方法或者属性可以对这个对象形成怎样的影响? 起了哪些便利之处 数组和对象的本质区别在于,数组的属性是有序的,而对象的属性是无序的,也就是说数组数据存放在内存的位置是排列的,这就涉及到数据结构 数组/对象...的方法调用

1.用.运算符 2.('xxx') ['xxx'] 这是调用自身拥有的属性,是key的名称 3.(xxx)[xxx]这是调用自身属性里面的变量

静态方法和实例方法的区别 var a = { b:'你好世界', c:'hello' } Object.keys(a) //['b','c'] a.keys() //报错 为什么下面的语句会报错? //因为静态方法和实例方法是有区别的,静态方法指的是对象本身拥有的方法,实例方法是对象.prototy.xxx放在prototy给子孙后代继承用的 //简单来说,a对象是Object对象的实例,a能用的方法是继承自Object的prototy属性里面的方法,所以a是没有keys()这个方法的,所以报错 不同的对象都有自己的toString和valueOf方法具体用法要看具体类型 数值相关全局方法 shuzi.png

常用4个

- parseInt方法用于将字符串转为整数。 - parseFloat方法用于将一个字符串转为浮点数。 - isNaN方法可以用来判断一个值是否为NaN。 - isFinite方法返回一个布尔值,表示某个值是否为正常的数值。 Object对象API obeje.png

(1)对象属性模型的相关方法

Object.getOwnPropertyDescriptor():获取某个属性的描述对象。 Object.defineProperty():通过描述对象,定义某个属性。 Object.defineProperties():通过描述对象,定义多个属性。 (2)控制对象状态的方法

Object.preventExtensions():防止对象扩展。 Object.isExtensible():判断对象是否可扩展。 Object.seal():禁止对象配置。 Object.isSealed():判断一个对象是否可配置。 Object.freeze():冻结一个对象。 Object.isFrozen():判断一个对象是否被冻结。 (3)原型链相关方法

Object.create():该方法可以指定原型对象和属性,返回一个新的对象。 Object.getPrototypeOf():获取对象的Prototype对象。

Object.keys方法和Object.getOwnPropertyNames方法都用来遍历对象的属性。

valueOf方法的作用是返回一个对象的“值”,默认情况下返回对象本身。

toString方法的作用是返回一个对象的字符串形式,默认情况下返回类型字符串。

Object.prototype.toString方法返回对象的类型字符串,因此可以用来判断一个值的类型。

Object.prototype.toLocaleString方法与toString的返回结果相同,也是返回一个值的字符串形式。这个方法的主要作用是留出一个接口,让各种不同的对象实现自己版本的toLocaleString,用来返回针对某些地域的特定的值。

Object.prototype.hasOwnProperty方法接受一个字符串作为参数,返回一个布尔值,表示该实例对象自身是否具有该属性。

常用性思考: 一个对象拥有的东西只能是属性/属性对应的值/继承的方法, 从这方面思考就可以想到常用的API是哪些:枚举属性的,属性的tostring/valueOf,继承相关的 常用的8个 //静态方法 Object.keys(),Object.getOwnPropertyNames() //实例方法 Object.prototype.valueOf():返回当前对象对应的值。 Object.prototype.toString():返回当前对象对应的字符串形式。 //toString方法,结果返回一个字符串object Object,其中第二个Object表示该值的构造函数。这是一个十分有用的判断数据类型的方法。 //由于实例对象可能会自定义toString方法,覆盖掉Object.prototype.toString方法,所以为了得到类型字符串,最好直接使用Object.prototype.toString方法。 //通过函数的call方法,可以在任意值上调用这个方法,帮助我们判断这个值的类型。 Object.prototype.toLocaleString():返回当前对象对应的本地字符串形式。 Object.prototype.hasOwnProperty():判断某个属性是否为当前对象自身的属性,还是继承自原型对象的属性。 /*var obj = { p: 123 }; obj.hasOwnProperty('p') // true obj.hasOwnProperty('toString') // false */ Object.prototype.isPrototypeOf():判断当前对象是否为另一个对象的原型。 Object.prototype.propertyIsEnumerable():判断某个属性是否可枚举。 Array对象API array.png Array.isArray方法返回一个布尔值,表示参数是否为数组。它可以弥补typeof运算符的不足。 - valueOf方法是一个所有对象都拥有的方法,表示对该对象求值。不同对象的valueOf方法不尽一致,数组的valueOf方法返回数组本身。 - toString方法也是对象的通用方法,数组的toString方法返回数组的字符串形式。 - push方法用于在数组的末端添加一个或多个元素,并返回添加新元素后的数组长度。注意,该方法会改变原数组。 - pop方法用于删除数组的最后一个元素,并返回该元素。注意,该方法会改变原数组。 - shift方法用于删除数组的第一个元素,并返回该元素。注意,该方法会改变原数组。 - push和shift结合使用,就构成了“先进先出”的队列结构(queue)。 unshift方法用于在数组的第一个位置添加元素,并返回添加新元素后的数组长度。注意,该方法会改变原数组。 - join方法以指定参数作为分隔符,将所有数组成员连接为一个字符串返回。如果不提供参数,默认用逗号分隔。 - concat方法用于多个数组的合并。它将新数组的成员,添加到原数组成员的后部,然后返回一个新数组,原数组不变。 - reverse方法用于颠倒排列数组元素,返回改变后的数组。注意,该方法将改变原数组。 - slice方法用于提取目标数组的一部分,返回一个新数组,原数组不变。 - splice方法用于删除原数组的一部分成员,并可以在删除的位置添加新的数组成员,返回值是被删除的元素。注意,该方法会改变原数组。 - sort方法对数组成员进行排序,默认是按照字典顺序排序。排序后,原数组将被改变。 - map方法将数组的所有成员依次传入参数函数,然后把每一次的执行结果组成一个新数组返回。 - forEach方法与map方法很相似,也是对数组的所有成员依次执行参数函数。但是,forEach方法不返回值,只用来操作数据。这就是说,如果数组遍历的目的是为了得到返回值,那么使用map方法,否则使用forEach方法。 - filter方法用于过滤数组成员,满足条件的成员组成一个新数组返回。 - some方法是只要一个成员的返回值是true,则整个some方法的返回值就是true,否则返回false。 - every方法是所有成员的返回值都是true,整个every方法才返回true,否则返回false。 - reduce方法和reduceRight方法依次处理数组的每个成员,最终累计为一个值。它们的差别是,reduce是从左到右处理(从第一个成员到最后一个成员),reduceRight则是从右到左(从最后一个成员到第一个成员),其他完全一样。 - indexOf方法返回给定元素在数组中第一次出现的位置,如果没有出现则返回-1。 - lastIndexOf方法返回给定元素在数组中最后一次出现的位置,如果没有出现则返回-1。 数组的常用性思考:

1.数组成员的增删改查和遍历 2.数组的出现就是要区别于简单的对象,他存在的意义就是数据的结构性 3.数组的排序,讲究的是内存区域的位置顺序而与数据类型无关,所以一个数组可以存放多种不同类型的数据 4.因为数据是牵涉到数据结构的对象,所以数据的很多API是会修改原来数组的 5.数组和伪数组的本质区别在于原型链不同,伪数组是没有继承Array.prototy.xxxx一系列方法的 6.上面这些数组方法之中,有不少返回的还是数组,所以可以链式使用。 7.push和pop结合使用,就构成了“后进先出”的栈结构(stack)。 8.push和shift结合使用,就构成了“先进先出”的队列结构(queue)。

NumberAPI number.png Number对象部署了自己的toString方法,用来将一个数值转为字符串形式。 toFixed方法先将一个数转为指定位数的小数,然后返回这个小数对应的字符串。 toExponential方法用于将一个数转为科学计数法形式。 toPrecision方法用于将一个数转为指定位数的有效数字。 包装对象 包装的意义就在于,更改原数据的原型链,这才真正实现了JavaScript一切都是对象的定义 valueOf方法返回包装对象实例对应的原始类型的值。 new Number(123).valueOf() // 123 new String('abc').valueOf() // "abc" new Boolean(true).valueOf() // true toString方法返回对应的字符串形式。 new Number(123).toString() // "123" new String('abc').toString() // "abc" new Boolean(true).toString() // "true" stringAPI string.png 常用属性思路:

1.字符是单个的,字符串就是一个字符的数组,应该有很多类似Array.prototy.xxx的方法 2.牵涉到字符,肯定也会牵涉到Unicode编码 3.字符串和数组有点不同,数组侧重点在于改变数据结构,所以很多API会改变数组本身,而字符串侧重点在于取值,所以和数组很多类似的API不会改变字符串本身而是返回一个新对象 4.字串的增删改查

String对象提供的静态方法(即定义在对象本身,而不是定义在对象实例的方法),主要是String.fromCharCode()。该方法的参数是一个或多个数值,代表 Unicode 码点,返回值是这些码点组成的字符串。 字符串实例的length属性返回字符串的长度。 charAt方法返回指定位置的字符,参数是从0开始编号的位置。 charCodeAt方法返回字符串指定位置的 Unicode 码点(十进制表示),相当于String.fromCharCode()的逆操作。 concat方法用于连接两个字符串,返回一个新字符串,不改变原字符串。 slice方法用于从原字符串取出子字符串并返回,不改变原字符串。它的第一个参数是子字符串的开始位置,第二个参数是子字符串的结束位置(不含该位置)。 substring方法用于从原字符串取出子字符串并返回,不改变原字符串,跟slice方法很相像。它的第一个参数表示子字符串的开始位置,第二个位置表示结束位置(返回结果不含该位置)。 substr方法用于从原字符串取出子字符串并返回,不改变原字符串,跟slice和substring方法的作用相同。

substr方法的第一个参数是子字符串的开始位置(从0开始计算),第二个参数是子字符串的长度。

indexOf方法用于确定一个字符串在另一个字符串中第一次出现的位置,返回结果是匹配开始的位置。如果返回-1,就表示不匹配。 trim方法用于去除字符串两端的空格,返回一个新字符串,不改变原字符串。 toLowerCase方法用于将一个字符串全部转为小写,toUpperCase则是全部转为大写。它们都返回一个新字符串,不改变原字符串。 match方法用于确定原字符串是否匹配某个子字符串,返回一个数组,成员为匹配的第一个字符串。如果没有找到匹配,则返回null。 search方法的用法基本等同于match,但是返回值为匹配的第一个位置。如果没有找到匹配,则返回-1。 split方法按照给定规则分割字符串,返回一个由分割出来的子字符串组成的数组。 localeCompare方法用于比较两个字符串。它返回一个整数,如果小于0,表示第一个字符串小于第二个字符串;如果等于0,表示两者相等;如果大于0,表示第一个字符串大于第二个字符串。 mathAPI math.png Math.abs方法返回参数值的绝对值。 Math.max方法返回参数之中最大的那个值,Math.min返回最小的那个值。如果参数为空, Math.min返回Infinity, Math.max返回-Infinity。 Math.floor方法小于参数值的最大整数(地板值)。 Math.round方法用于四舍五入。 Math.pow方法返回以第一个参数为底数、第二个参数为幂的指数值。 Math.sqrt方法返回参数值的平方根。如果参数是一个负值,则返回NaN。 Math.log方法返回以e为底的自然对数值。 Math.exp方法返回常数e的参数次方。 Math.random()返回0到1之间的一个伪随机数,可能等于0,但是一定小于1。 Math对象还提供一系列三角函数方法。 Math.sin():返回参数的正弦(参数为弧度值) Math.cos():返回参数的余弦(参数为弧度值) Math.tan():返回参数的正切(参数为弧度值) Math.asin():返回参数的反正弦(返回值为弧度值) Math.acos():返回参数的反余弦(返回值为弧度值) Math.atan():返回参数的反正切(返回值为弧度值) DateAPI Date.now方法返回当前时间距离时间零点(1970年1月1日 00:00:00 UTC)的毫秒数,相当于 Unix 时间戳乘以1000。 Date.parse方法用来解析日期字符串,返回该时间距离时间零点(1970年1月1日 00:00:00)的毫秒数。 Date.UTC方法接受年、月、日等变量作为参数,返回该时间距离时间零点(1970年1月1日 00:00:00 UTC)的毫秒数。 valueOf方法返回实例对象距离时间零点(1970年1月1日00:00:00 UTC)对应的毫秒数,该方法等同于getTime方法。 //Date对象提供了一系列get*方法,用来获取实例对象某个方面的值。 getTime():返回实例距离1970年1月1日00:00:00的毫秒数,等同于valueOf方法。 getDate():返回实例对象对应每个月的几号(从1开始)。 getDay():返回星期几,星期日为0,星期一为1,以此类推。 getYear():返回距离1900的年数。 getFullYear():返回四位的年份。 getMonth():返回月份(0表示1月,11表示12月)。 getHours():返回小时(0-23)。 getMilliseconds():返回毫秒(0-999)。 getMinutes():返回分钟(0-59)。 getSeconds():返回秒(0-59)。 getTimezoneOffset():返回当前时间与 UTC 的时区差异,以分钟表示,返回结果考虑到了夏令时因素。 //上面这些get*方法返回的都是当前时区的时间,Date对象还提供了这些方法对应的 UTC 版本,用来返回 UTC 时间。 getUTCDate() getUTCFullYear() getUTCMonth() getUTCDay() getUTCHours() getUTCMinutes() getUTCSeconds() getUTCMilliseconds() Date对象提供了一系列set*方法,用来设置实例对象的各个方面。 setDate(date):设置实例对象对应的每个月的几号(1-31),返回改变后毫秒时间戳。 setYear(year): 设置距离1900年的年数。 setFullYear(year [, month, date]):设置四位年份。 setHours(hour [, min, sec, ms]):设置小时(0-23)。 setMilliseconds():设置毫秒(0-999)。 setMinutes(min [, sec, ms]):设置分钟(0-59)。 setMonth(month [, date]):设置月份(0-11)。 setSeconds(sec [, ms]):设置秒(0-59)。 setTime(milliseconds):设置毫秒时间戳。 //set*系列方法除了setTime()和setYear(),都有对应的 UTC 版本,即设置 UTC 时区的时间。 setUTCDate() setUTCFullYear() setUTCHours() setUTCMilliseconds() setUTCMinutes() setUTCMonth() setUTCSeconds() 正则表达式API zhengze.png 正则实例对象的test方法返回一个布尔值,表示当前模式是否能匹配参数字符串。 正则实例对象的exec方法,用来返回匹配结果。如果发现匹配,就返回一个数组,成员是匹配成功的子字符串,否则返回null。 字符串实例对象的match方法对字符串进行正则匹配,返回匹配结果。 字符串对象的search方法,返回第一个满足条件的匹配结果在整个字符串中的位置。如果没有任何匹配,则返回-1。 字符串对象的replace方法可以替换匹配的值。它接受两个参数,第一个是正则表达式,表示搜索模式,第二个是替换的内容。 字符串对象的split方法按照正则规则分割字符串,返回一个由分割后的各个部分组成的数组。 jsonAPI json.png JSON.stringify方法用于将一个值转为 JSON 字符串。该字符串符合 JSON 格式,并且可以被JSON.parse方法还原。 JSON.parse方法用于将 JSON 字符串转换成对应的值。 consoleAPI console.png 属性描述对象API kongzhi.png 意外收获

!!el&&el.NodeType ===1 //为什么要这样写代码来判断是否是元素节点呢? //因为JavaScript是动态语言,类型可以转换,再加上,使用xxx.NodeType这些挂载在对象属性上的方法,是可以伪造的

var a = { NodeType:1 }

//如上所示,这样是不是把a也当做一个元素啦? 所以基于这些原因,当JavaScript 代码要做判断的时候往往要用上&&来进行多层筛选,这样才能确保达到我们的目的



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3